﻿/*******************************************************
 *
 * 这是整个程序的公共区域。
 * 这里存放一些公用的结构或者类
 *
 *******************************************************/
#ifndef APPBASE_H
#define APPBASE_H

#include <string>

#include <QCoreApplication>
#include <QString>

/*
 * 程序路径相关的结构
 * */
struct ChMSAppPath {

    /*
     * 当前程序工作目录
     * */
    const QString appPath = QCoreApplication::applicationDirPath();
    //static QString appPath;

    /*
     * 程序配置文件路径
     * */
    const QString configPath = appPath + "/config.ini";

    /*
     * DNS 列表 存储文件的路径
     * */
    const QString iniOfDNSPath = appPath + "/DNS.ini";

};

/*
 * 用于中文字符处理
 * @funQStrTextCodec（QByteArray &inText）const， 中文字符转 QString 函数
 * 参数说明: inText 需要转换的中文字符。
 * 使用时直接复制下面代码:
 * ChMSTextCodec ChMSTc;
 * */
struct ChMSTextCodec{
    QString funQStrTextCodec(QByteArray &inText) const;
};

/*
 *
 * 程序基本版权信息
 *
 * */
struct ChMSVersion{
    QByteArray ProName = "小鸡炖蘑菇"; // 程序名称
    QByteArray Version = "1.2.0"; // 程序版本
    QByteArray Author = "马中周"; // 作者
    QByteArray Email = "40722054@qq.com"; // 作者EMAIL
};

/*
 * 操作配置文件相关的类
 * 对象计数器主要用于自己建立的非继承自QT类
 * */
class AppBase
{

public:
    explicit AppBase();
    ~AppBase();

    /*
     * 运行中存储程序配置文件参数。
     * */
    static int varItemSelect; // 上一次关闭程序是左侧列表的位置，从配置文件中读取的列表选择项在这里保存
    static int debugRun; // 是否开启调试日志,1:开启 ；默认值0 不开启

    /*
     * 配置文件初始化
     * */
    void funVoidConfigInitializes();

     /*
     * 保存配置文件
     * @groupName: 配置文件中的组名
     * @setKey: 配置文件中的键名
     * @setValue: 配置文件中的键值
     * */
    void funVoidWriteConfig(const QString &groupName,const QString &setKey,const QString &setValue) const;

    /*
     * 读取配置文件
     * @groupName: 配置文件中的组名
     * @setKey: 配置文件中的键名
     * */
    QString funQStrReadConfig(const QString &groupName, const QString &setKey) const;

    /*
     * 写 DNS 配置文件
     * */
    void funVoidWriteDnsIni();

    /*
     * 读 DNS 配置文件
     * */
    QStringList funQStrListReadDnsIni();

    /*
     * 对象计数器取数函数
     * */
    static int sFunGetCounter();

    /*
     * 重载 new delete
     * */
    void *operator new(size_t s);
    void *operator new(size_t s,void *p);
    void operator delete(void *ptr);

private:
    static int sNewCounter;
    ChMSVersion* pChMSV = nullptr;
};

#endif // APPBASE_H
